<?php

/**
 * This file is part of project alg-performance.
 *
 * Author: Jake
 * Create: 2019-04-23 17:54:45
 */

namespace App\Exceptions;


class AppException extends \Exception
{
    /**
     * 错误码
     *
     * 请按照数字顺序增加
     * 如果错误可以归为某种类型，可以用.隔成多段，比如`runtime.bad_request`，`file.unsupported_file_type`
     * 大写字符代表对应错误数字不能被修改
     *
     * @var array
     */
    public static $errMap = [
        // core service
        'ERR_USERID_CELLPHONE_NOMATCH'        => [164, '手机号与用户ID不一致'],

        // 120000 ~ 120100 系统错误码
        'model_not_found'                     => [120000, '模型未找到'],
        'err_param_invalid'                   => [120001, '%s'],
        'data_not_found'                      => [120002, '数据不存在，或者您没有权限进行该操作'],
        'operation_not_allowed'               => [120003, '当前不支持该操作'],
        'get_admin_token_failed'              => [120004, '管理员登录失败'],
        'console_refresh_admin_token_failed'  => [120005, '刷新管理员token失败'],
        'request_failed'                      => [120006, '请求失败：%s'],
        'out_request_failed'                  => [120007, '调用外部请求失败'],
        'file.unsupported_file_type'          => [120008, '不支持该类型的文件'],
        'file.unsupported_file_size'          => [120009, '不支持该大小的文件'],
        'file.upload_failed'                  => [120010, '文件上传失败'],
        'runtime.bad_request'                 => [120011, '请求错误：%s'],
        'todo'                                => [120012, '该功能正在开发中...'],
        'value_must_be_alpha_num'             => [120013, '%s 只能为字母或者数字'],
        'code_error'                          => [120014, '亲，程序出错了：%s'],
        'user_not_find'                       => [120015, '未找到用户信息'],
        'excel_multi_sheets_found'            => [120016, '上传的表格只能包含一个sheet，请删除多余的sheet'],
        'not_allow_empty_value'               => [120017, '%s 不能为空'],
        'unknown_locale_for_determine_a_timezone' => [120018, '无法根据%s来决定当前时区'],
        'not_allowed_to_access'               => [120019, '没有访问该数据的权限'],
        'user_info_verify_failed'             => [120020, '用户身份验证失败'],


        // 120101 ~ 120200 type1,type2,公共type业务错误码
        'export_fail'                        => [120101, '导出错误'],
        'edit_project_fail'                  => [120102, '编辑项目失败'],
        'import_is_fail'                     => [120103, '导入错误'],
        'import_type_is_fail'                => [120103, '导入格式错误'],
        'find_member_is_fail'                => [120104, '用户不存在'],
        'find_clock_is_fail'                => [120105, '配置不存在'],
        'find_member_is_exist'                => [120106, '用户已经存在'],
        'find_hospital_is_exist'                => [120107, '医院已经存在'],
        'find_hospital_is_fail'                => [120108, '医院不存在'],

    ];

    public function __construct($err, ...$params)
    {
        header('Content-Type: text/html;charset=utf-8');
        header('Access-Control-Allow-Origin:*'); // *代表允许任何网址请求
        header('Access-Control-Allow-Methods:POST,GET,OPTIONS,DELETE'); // 允许请求的类型
        header('Access-Control-Allow-Credentials: true'); // 设置是否允许发送

        $error = self::$errMap[$err];

        list($code, $message) = $error;

        if (!empty($params)) {
            $message = sprintf($message, ...$params);
        }
        echo json_encode([
            'code' => $code,
            'msg' => $message,
        ]);die;
        parent::__construct($message, $code, null, $code);

    }
}
